package com.zaoniao.enstudy.domain.repository;

import com.zaoniao.enstudy.domain.entity.ExamAnswer;
import com.zaoniao.enstudy.domain.entity.ExamPaper;
import com.zaoniao.enstudy.domain.entity.ExamWords;
import com.zaoniao.enstudy.infrastructure.po.ExamWordsPo;

import java.util.List;

public interface ExamRepository {

    /**
     * list 批量插入.
     *
     * @param examWordsPos -
     */
    void insertList(List<ExamWordsPo> examWordsPos);

    /**
     * 删除所有数据.
     */
    void deleteAll();

    /**
     * 随机获取{examCount}个题目，且不再用户历史考试记录中.
     *
     * @param examCount 题目数
     * @param userId    用户Id
     * @return 考题库
     */
    List<ExamWords> randomSelect(Integer examCount, String userId);

    /**
     * 插入考试记录.
     *
     * @param examPaper 考试记录
     */
    ExamPaper insertExamPaper(ExamPaper examPaper);

    /**
     * 批量插入考试记录.
     *
     * @param examAnswers 考试记录
     */
    void insertBatchExamAnswer(List<ExamAnswer> examAnswers);

    /**
     * 开始考试.
     *
     * @param paperId 考试记录Id
     */
    void startExamPaper(Integer paperId);

    /**
     * 结束考试.
     *
     * @param paperId 考试记录Id
     */
    void endExamPaper(Integer paperId);

    /**
     * 用户考试记录列表.
     *
     * @param userId 用户Id
     * @return 个人考试记录列表
     */
    List<ExamPaper> examList(String userId);

    /**
     * 用户答题.
     * @param wordAnswer 用户答题信息
     */
    void updateAnswer(ExamAnswer wordAnswer);

    /**
     * 考题单词详情
     * @param word 单词
     * @return 单词详情
     */
    ExamWords getExamWord(String word);

    /**
     * 更新用户答题正确数.
     * @param examPaperId 考试记录Id
     */
    void updatePaperTrueCount(Integer examPaperId);
}
